/**
 * Clase PantallaInformacionMedicamento: define la pantalla de visualizacion de la informacion relativa
 * a un paciente concreto
 */

package infbmobile.pantallas;

// Importaciones externas
import com.sun.lwuit.*;
import com.sun.lwuit.animations.CommonTransitions;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.layouts.*;
import com.sun.lwuit.events.ActionListener;

// Importaciones internas
import com.sun.lwuit.plaf.Style;
import infbmobile.comunicaciones.ComunicacionHttp;
import infbmobile.main.InfBMobileMedico;
import infbmobile.util.UIHerramientas;
import java.io.IOException;
import java.util.Hashtable;


public class PantallaInformacionPaciente extends Form implements ActionListener {
    // Referencia a la pantalla "padre"
    public PantallaListadoMisPacientes padre;

    // Atributos de clase
    private String[] paciente;
    private TextField nombre,apellidos,telefono,mail,direccion,localidad,grupoSang,fechaNac,dni;
    private Command comandoVolver;
    public static String[] opciones=new String[]{"Grabadora","Historial"};
    private Hashtable hashBotonesOpciones;
    private int numFilas=1;
    private int numColumnas=1;
    private InfBMobileMedico midlet;
    private Hashtable resultadosBusqueda;
    private PantallaHistorial pantallaHistorial;
    private PantallaInformacionPaciente pantallaInformacionPaciente;
    /*
     * Constructor principal de la clase
     */
    public PantallaInformacionPaciente(PantallaListadoMisPacientes padre,String[] paciente,InfBMobileMedico midlet) {
        super("Informacion del Paciente - HospiGest Medico");
        this.padre=padre;
        this.paciente=paciente;
        this.midlet=midlet;
        // Definimos el layout del formulario
        setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        /*ENTIDAD PACIENTE
                    0 identificacion (dni)
                    1 nombre
                    2 apellido1
                    3 apellido2
                    4 telefono
                    5 mail
                    6 direccion
                    7 localidad
                    8 grupoSang
            */
        dni         = new TextField(LEFT);
        nombre      = new TextField(LEFT);
        apellidos   = new TextField(LEFT);
        grupoSang   = new TextField(LEFT);
        telefono    = new TextField(LEFT);
        mail        = new TextField(LEFT);
        direccion   = new TextField(LEFT);
        localidad   = new TextField(LEFT);
        fechaNac    = new TextField(LEFT);
        
        dni.setText(paciente[0]);dni.setEditable(false);
        nombre.setText(paciente[1]);    nombre.setEditable(false);
        apellidos.setText(paciente[2]+" "+paciente[3]);apellidos.setEditable(false);
        telefono.setText(paciente[4]);  telefono.setEditable(false);
        mail.setText(paciente[5]);      mail.setEditable(false);
        direccion.setText(paciente[6]); direccion.setEditable(false);
        localidad.setText(paciente[7]); localidad.setEditable(false);
        grupoSang.setText(paciente[8]); grupoSang.setEditable(false);
        fechaNac.setText(paciente[9]);  fechaNac.setEditable(false);

        addComponent(UIHerramientas.crearParejaFija("dni: ",dni,70));
        addComponent(UIHerramientas.crearParejaFija("nombre: ",nombre,70));
        addComponent(UIHerramientas.crearParejaFija("apellidos: ",apellidos,70));
        addComponent(UIHerramientas.crearParejaFija("grupo sanguineo: ",grupoSang,70));
        addComponent(UIHerramientas.crearParejaFija("telefono: ",telefono,70));
        addComponent(UIHerramientas.crearParejaFija("mail: ",mail,70));
        addComponent(UIHerramientas.crearParejaFija("direccion: ",direccion,70));
        addComponent(UIHerramientas.crearParejaFija("localidad: ",localidad,70));
        addComponent(UIHerramientas.crearParejaFija("fecha de nacimiento: ",fechaNac,70));

        Container contenedorBotones=new Container();
        contenedorBotones.setLayout(new FlowLayout(CENTER));

        hashBotonesOpciones=new Hashtable();
        int anchoMaxBoton=0;
        int anchoPantalla=Display.getInstance().getDisplayWidth();

        Image[] iconosIn=new Image[opciones.length];
        Image[] iconosOut=new Image[opciones.length];
        // Cargamos los iconos
        for(int i=0;i<opciones.length;i++){
            // Obtenemos las imagenes de los iconos
            try{
                iconosIn[i]=Image.createImage("/res/iconos/"+opciones[i]+"_IN.png");
                iconosOut[i]=Image.createImage("/res/iconos/"+opciones[i]+"_OUT.png");
            }catch(IOException ioe){
                ioe.printStackTrace();
            }
            // Creamos el boton con el icono
            Button boton=new Button(opciones[i],iconosOut[i]);
            // Modificamos la aparencia del boton
            Style estiloBoton=boton.getStyle();
            estiloBoton.setBorder(null);
            estiloBoton.setBgTransparency(0);
            // Centramos el texto del boton y lo posicionamos debajo de la imagen
            boton.setAlignment(Label.CENTER);
            boton.setTextPosition(Label.BOTTOM);

            // Establecemos la imagen a mostrar cuando el icono sea seleccionado
            boton.setRolloverIcon(iconosIn[i]);
            boton.addActionListener(this);
            // Creamos la asociacion del boton a la pantalla
            hashBotonesOpciones.put(boton,opciones[i]);
            // Agregamos el boton al formulario
           // addComponent(boton);

            contenedorBotones.addComponent(boton);
            // De todos los botones procesados, nos quedamos con aquel de anchura maxima
            // pues el sera el que determinara cuantas "columnas" dispondra la pantalla
            // (puesto que el numero de columnas va en funcion de la maxima anchura de
            // un elemento mostrado por pantalla)
            anchoMaxBoton=Math.max(boton.getPreferredW(),anchoMaxBoton);
        }
     
        // Agregamos los comandos
        addComponent(contenedorBotones);
        comandoVolver=new Command("Volver");
        addCommand(comandoVolver);
        setCommandListener(this);
        // La creacion del formulario se automuestra
        show();
    }
    private void recuperarHistorial(String dni){

        // Configuramos una comunicacion http mediante el uso de la libreria desarrollada
        ComunicacionHttp.setHost(midlet.servidorWeb);
        ComunicacionHttp.setPuerto(midlet.puerto);
        ComunicacionHttp http=new ComunicacionHttp(ComunicacionHttp.VER_HISTORIAL,"GestionPacientes",this);
        String[] nombreParametros=new String[]{"accion","dniPaciente"};
        String[] valoresParametros=new String[]{"ver_historial",dni};
        http.setNombreParametros(nombreParametros);
        http.setValoresParametros(valoresParametros);
        http.setCheckSesion(false); // primero probamos sin mantenimiento de sesion
        http.setModoHebra(true);
        http.conectar();

    }

    private void cargarOpcion(String pantalla) {
        if(pantalla.equalsIgnoreCase("Grabadora")){
            // Mostramos la pantalla de citas
            midlet.mostrarPantallaGrabadora(paciente[0]);
        }else if(pantalla.equalsIgnoreCase("Historial")){
            recuperarHistorial(paciente[0]);
        }
        // Asi con todas las pantallas que vayamos creando
    }

    public void actionPerformed(ActionEvent evento) {
        Object fuente=evento.getSource();

        if(fuente==comandoVolver){
            System.gc();
            padre.show();
        }else{
            // Detectamos el icono pulsado
            String opcion=(String)hashBotonesOpciones.get(fuente);
            cargarOpcion(opcion);
            
        }
    }

    public void setResultadosBusqueda(Hashtable resultados) {
        resultadosBusqueda=resultados;
    }

    public void mostrarListado() {
        if(pantallaHistorial==null){
            pantallaHistorial=new PantallaHistorial(this,resultadosBusqueda);
        }
        pantallaHistorial.show();
    }

}